package com.aquila.bible.mywidget;


import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.ScrollView;

/***
 * ScrollView反弹效果的实现 
 * @author tc003166
 * 2012-5-17
 * 上午09:54:52
 */
public class MyScrollView extends ScrollView
{
    private View inner;

    private float y;
    
    private boolean isFirst = true ;
    
    private Rect normal = new Rect();;

    public MyScrollView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    @Override
    protected void onFinishInflate()
    {
        if (getChildCount() > 0)
        {
            inner = getChildAt(0);

        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev)
    {
        if (inner == null)
        {
            return super.onTouchEvent(ev);
        }
        else
        {
            commOnTouchEvent(ev);
        }

        return super.onTouchEvent(ev);
    }

    public void commOnTouchEvent(MotionEvent ev)
    {
        int action = ev.getAction();
        switch (action)
        {
            case MotionEvent.ACTION_DOWN:
                y = ev.getY();
                isFirst = false ;
                break;
            case MotionEvent.ACTION_UP:
            	isFirst = true ;
                if (isNeedAnimation()){
                    animation();
                }

                break;
            case MotionEvent.ACTION_MOVE:
            	if (isFirst) {
					y = ev.getY() ;
					isFirst = false ;
				}
            	final float preY = y;
                float nowY = ev.getY();
                int deltaY = (int) (preY - nowY) * 2 / 3;
                // 滚动
                scrollBy(0, deltaY);
                y = nowY;
                // 当滚动到最上或者最下时就不会再滚动，这时移动布局
                if (isNeedMove()){
                    if (normal.isEmpty()){
                        // 保存正常的布局位置
                        normal.set(inner.getLeft(), inner.getTop(), inner.getRight(), inner.getBottom());

                    }
                    // 移动布局
                    inner.layout(inner.getLeft(), inner.getTop() - deltaY, inner.getRight(), inner.getBottom() - deltaY);
                }
                break;

            default:
                break;
        }
    }

    // 开启动画移动

    public void animation()
    {
        // 开启移动动画
        TranslateAnimation ta = new TranslateAnimation(0, 0, inner.getTop(), normal.top);
        ta.setDuration(600);
        inner.startAnimation(ta);
        // 设置回到正常的布局位置
        inner.layout(normal.left, normal.top, normal.right, normal.bottom);

        normal.setEmpty();

    }

    // 是否需要开启动画
    public boolean isNeedAnimation()
    {
        return !normal.isEmpty();
    }

    // 是否需要移动布局
    public boolean isNeedMove()
    {

        int offset = inner.getMeasuredHeight() - getHeight();
        int scrollY = getScrollY();
        if (scrollY == 0 || scrollY == offset)
        {
            return true;
        }
        return false;
    }

}
